package SSM.Chat.Service;

import SSM.Chat.Domain.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface BookService {

    List<Settings> SettingSelectAll();
    void AutoCodeAdd(AuthCode authCode);
    List<AuthCode> AutoCodeSelectAll();
    /**
     * 根据验证码邮箱,类型,文本信息删除验证码
     * @param authCode 传递一个验证码
     * @return 返回验证码信息
     */
    void DelAutoCode(AuthCode authCode);

    /**
     * 根据验证码邮箱,类型,文本信息查询验证码
     * @param authCode 传递一个验证码
     * @return 返回验证码信息
     */
    AuthCode SelectTypeAutoCode(AuthCode authCode);
    User SelectUserMailbox(@Param("userMailbox") String userMailbox);
    void  UserAdd(User user);
    void SettingAdd(Settings settings);

    /**
     * 根据邮箱,类型,文本修改使用情况
     * @param authCode
     * @return
     */
    Boolean AutoCodeUpdateUse(AuthCode authCode);
    User UserLogin(User user);
    /**
     * 根据邮箱修改密码
     * @param user
     */
    void UserUpdatePassword(User user);

    /**
     * 根据邮箱查询用户
     * @param userMailbox 邮箱
     * @return 用户信息
     */
    User UserSelectMailbox(@Param("userMailbox") String userMailbox);
    /**
     * 根据邮箱查询用户配置表
     * @param userMailbox 邮箱
     * @return 用户配置表信息
     */
    Settings SettingSelectMailbox(@Param("userMailbox") String userMailbox);

    /**
     * 根据用户邮箱查询用户所有好友
     * @param buddyOneselfId 用户邮箱
     * @return
     */
    List<Buddy> BuddySelectOneself(@Param("buddyOneselfId") String buddyOneselfId);

    /**
     * 批量查询好友信息
     * @param list 邮箱数组
     * @return
     */
    List<User> UserBatchSelect(@Param("list") String[] list);

    /**
     * 根据用户邮箱查询所有用户
     * @param groupUserId 用户邮箱
     * @return
     */
    List<Group> GroupSelectUserId(@Param("groupUserId") String groupUserId);

    /**
     * 批量查询非好友用户信息
     * @param list  好友邮箱数组
     * @param userMailbox // 当前用户邮箱
     * @return
     */
    List<User> UserNotBatchSelect(@Param("list") String[] list,
                                  @Param("userMailbox") String userMailbox);

    /**
     * 模糊查询排除自己
     * @param user  传递自己的邮箱，以及模糊查询的邮箱
     * @return
     */
    List<User> UserBlurSelect(User user);

    /**
     * 根据分组邮箱和名称查询分组
     * @param group
     * @return
     */
    Group GroupSelectName(Group group);

    /**
     * 添加分组信息
     * @param group
     */
    void GroupInformation(Group group);

    /**
     * 添加好友
     * @param buddy
     */
    void BuddyInformation(Buddy buddy);

    /**
     * 添加好友申请
     * @param await
     */
    void AwaitInformation(Await await);

    /**
     * 根据申请人邮箱查询申请信息
     * @param awaitPrimary 申请人邮箱
     * @return
     */
    List<Await> AwaitSelectPrimary(@Param("awaitPrimary") String awaitPrimary);

    /**
     * 根据邮箱和分类查询好友信息
     * @param awaitPrimary 邮箱
     * @param awaitType 类型 1为主申请人，2为次要申请人
     * @return
     */
    List<Await> AwaitSelectPrimaryType(@Param("awaitPrimary") String awaitPrimary,@Param("awaitType") String awaitType);

    /**
     * 根据主邮箱和次要邮箱修改申请好友状态
     * @param await
     */
    void AwaitUpdateState(Await await);

    /**
     * 根据id查询分组
     * @param group
     * @return
     */
    Group GroupSelectId(Group group);

    /**
     * 根据主邮箱和次要邮箱查询信息
     * @param await
     * @return
     */
    Await AwaitSelectMailbox(Await await);

    /**
     * 根据主要邮箱和次要邮箱删除申请信息
     * @param await
     */
    void AwaitDelete(Await await);

    /**
     * 根据分组id修改分组名
     * @param group
     */
    void GroupUpdateName(Group group);

    /**
     * 根据分组id删除分组
     * @param group
     */
    void GroupDelete(Group group);

    /**
     * 根据主要邮箱和次要邮箱修改分组id
     * @param buddy
     */
    void BuddyUpdateGroup(Buddy buddy);

    /**
     * 根据主邮箱和次要邮箱查询好友
     * @param buddy
     */
    Buddy BuddySelectInformation(Buddy buddy);
    /**
     * 根据主邮箱和次要邮箱删除好友
     * @param buddy
     */
    void BuddyDelete(Buddy buddy);

    /**
     * 根据主邮箱和id查询好友
     * @param buddy
     * @return
     */
    List<Buddy> BuddySelectMailboxId(Buddy buddy);

    /**
     * 查询所有分组表信
     * @return
     */
    List<Await> AwaitSelectAll();

    /**
     * 根据主要邮箱和次要邮箱查询好友列表
     * @param chatList
     * @return
     */
    ChatList ChatListSelectMailbox(ChatList chatList);

    /**
     * 增加聊天列表信息
     * @param chatList
     */
    void ChatListInformation(ChatList chatList);

    /**
     * 根据主邮箱和次要邮箱修改状态内容
     * @param chatList
     */
    void ChatListUpdateType(ChatList chatList);

    /**
     * 新增聊天记录
     * @param chat
     */
    void ChatInformation(Chat chat);

    /**
     * 根据主邮箱和次要邮箱查询
     * @param chat
     * @return
     */
    List<Chat> ChatSelectMailbox(Chat chat);
    List<Settings> test();
    void ImageInformation(Image image);
    Image ImageSelectId(@Param("imageId") String image);
    void ChatUpdateMailboxType(Chat chat);
    Chat ChatSelectId(@Param("chatId") Integer chatId);
    void ChatDelete(@Param("chatId") Integer chatId);
    void ImageDelete(@Param("imageId") String imageId);
    List<Chat> ChatSelectMailBoxType(Chat chat);
    List<ChatList> ChatListSelectMailboxAll(@Param(
            "chatListMailbox")String chatListMailbox);
    void ChatListUpdateNew(ChatList chatList);
    void ChatListText(ChatList chatList);
    void SettingUpdateTheme(Settings settings);
    void SettingUpdateSidebar(Settings settings);
}
